package com.dyh.quickdemozwei.mja;

import com.dyh.quickdemozwei.TestScLog;
import javassist.*;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.type.ClassMetadata;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;

import java.util.ArrayList;
import java.util.List;

@Slf4j
public class MainLog {

    public static void main(String[] args) throws Exception {
        ClassPool cp = ClassPool.getDefault();

        CtClass ctClassYtq = cp.getCtClass("com.dyh.quickdemozwei.mja.Ytq");

        CtMethod ctMethodSleep = ctClassYtq.getMethod("sleep","()V");
        ctMethodSleep.insertBefore("System.out.println(\"before\");");

        Class classYtq = ctClassYtq.toClass();

        Ytq ytq = (Ytq) classYtq.newInstance();
        ytq.sleep();
    }

//    static CtClass targetctClass = null;
//    static {
//        ClassPool pool = ClassPool.getDefault();
//
//        PathMatchingResourcePatternResolver resolver=new PathMatchingResourcePatternResolver();
//        CachingMetadataReaderFactory factory=new CachingMetadataReaderFactory();
//
//
//        try {
//
//            Resource[] resources=resolver.getResources("ch/qos/logback/classic/**/*.class");
//
//
//            List<CtClass> ctClasses=new ArrayList<>();
//            for(Resource resource : resources){
//                MetadataReader reader=factory.getMetadataReader(resource);
//                ClassMetadata metadata=reader.getClassMetadata();
//
//
//
//                if (metadata.getClassName().endsWith(".Logger"))
//                {
//                    CtClass ctClass=pool.getCtClass(metadata.getClassName());
//                    targetctClass = ctClass;
//                    for (CtMethod method : ctClass.getMethods()) {
//
//                        if (method.getName().startsWith("error")){
//                            method.insertBefore("System.out.println(\"我在最后插入了\");");
//                        }
//                    }
//
//
//                }
//
//            }
//
//            for(CtClass ctClass : ctClasses){
//                try {
//                    ctClass.toClass();
//                }catch (Exception e){}
//            }
//
//
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            System.exit(1);
//        }
//
//    }
//
//    public static void main(String[] args) throws CannotCompileException, IllegalAccessException, InstantiationException {
//
//
//
//
//
//
//
////        Logger logger = LoggerFactory.getLogger(Main.class);
//        Logger logger = (Logger) targetctClass.toClass().newInstance();
//        logger.error("dawdaw {}","111");
//        System.out.println();
//
//        /*ch/qos/logback/classic/Logger"*/
//    }
}
